{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from path_explain import utils\n",
    "utils.set_up_environment(visible_devices='3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib as mpl\n",
    "from sklearn.decomposition import PCA\n",
    "from train import load_mnist\n",
    "from plot import colors\n",
    "import shap\n",
    "from path_explain.path_explainer_tf import PathExplainerTF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "mpl.rcParams['figure.dpi'] = 75"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test) = load_mnist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = tf.keras.models.load_model('model.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred_logits = model.predict(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred_labels = np.argmax(pred_logits, axis=-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 0.9913\n"
     ]
    }
   ],
   "source": [
    "test_accuracy = np.sum(pred_labels == y_test) / y_test.shape[0]\n",
    "print('Test accuracy: {}'.format(test_accuracy))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "cmap = colors.green_white_gold()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "attributions = np.load('attributions.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 450x1125 with 11 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "index = 3\n",
    "shap.image_plot(attributions[index:index+5, :, :], -x_test[index:index+5, :, :])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
